home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Gekkan Dennou Club 147
/
Gekkan Dennou Club - 2000.8 Vol. 147 (Japan).7z
/
Gekkan Dennou Club - 2000.8 Vol. 147 (Japan) (Track 1).bin
/
games
/
hexrev
/
graph.c
< prev
next >
Wrap
C/C++ Source or Header
|
2000-06-25
|
4KB
|
158 lines
/*****************************************************
graph.c : 六角リバーシ用グラフィック関連
Copyright (C) 1997 by Makoto Hiroi
*****************************************************/
#include "hexrev.h"
#define STR_COLOR 15
#define BG_COLOR 9
#define YELLOW 14
/* paint work area size */
#define WORKSIZE 1024
extern const short zahyou[SIZE][2];
extern int first_move;
extern int level;
/* 画面を塗りつぶす */
static void fill( int x1, int y1, int x2, int y2, int color )
{
struct _fillptr buff;
buff.x1 = x1;
buff.y1 = y1;
buff.x2 = x2;
buff.y2 = y2;
buff.color = color;
_iocs_fill( &buff );
}
/* 線を引く */
static void line( int x1, int y1, int x2, int y2, int color )
{
struct _lineptr buff;
buff.x1 = x1;
buff.y1 = y1;
buff.x2 = x2;
buff.y2 = y2;
buff.color = color;
buff.linestyle = 0xffff;
_iocs_line( &buff );
}
/* ページ 1 へ文字を書く */
static void print_string( int x, int y, int type, char *str, int color )
{
struct _symbolptr buff;
static int font_size[3] = { 6, 8, 12 }; /* 文字数は半角で数えるので */
int len = strlen( str );
int x1 = x + (len * font_size[type] - 1);
int y1 = y + (font_size[type] * 2 - 1);
_iocs_apage( 1 ); /* 文字はページ 1 へ */
fill( x, y, x1, y1, BG_COLOR ); /* クリア */
buff.x1 = x;
buff.y1 = y;
buff.string_address = str;
buff.mag_x = 1;
buff.mag_y = 1;
buff.color = color;
buff.font_type = type;
buff.angle = 0;
_iocs_symbol( &buff );
}
/* 駒を描く */
void draw_piece( int num, int piece )
{
int x = zahyou[num][0];
int y = zahyou[num][1];
int color = (piece == BLACK ? 1 : 15);
char work[WORKSIZE];
struct _paintptr ptr;
struct _circleptr circle;
_iocs_apage( 0 ); /* 石はページ 0 */
circle.x = x;
circle.y = y;
circle.radius = 17;
circle.color = color;
circle.start = 0;
circle.end = 360;
circle.ratio = 256;
_iocs_circle( &circle );
ptr.x = x;
ptr.y = y;
ptr.color = color;
ptr.buf_start = work;
ptr.buf_end = work + WORKSIZE;
_iocs_paint( &ptr );
}
/* レベルを書く */
void print_level( void )
{
char str[8];
sprintf( str, "LV%d", level );
print_string( 64 * 4 + 8, 480, 2, str, STR_COLOR );
}
/* 先手、後手を表示 */
void print_move( void )
{
print_string( 64 * 5 + 8, 480, 2, (first_move ? "先手" : "後手"), STR_COLOR );
}
/* パレットデータ */
static unsigned short palet_data[16] = {
/* 暗い赤 赤 明るい赤 暗い紫 紫 */
0x0000, 0x39CE, 0x5294, 0x0440, 0x0640, 0x3FCE, 0x0420, 0x056A,
/* 明るい紫 暗い緑 緑 明るい緑 暗い黄 黄色 明るい黄 白 */
0x0738, 0x8000, 0xB000, 0xF800, 0x9F40, 0xC7C0, 0xEFC0, 0xFFFE,
};
/* 画面の初期化 */
void init_screen( void )
{
int i;
_dos_c_curoff(); /* カーソルオフ */
_dos_c_fnkmod( 2 ); /* ファンクションキーオフ */
_iocs_ms_init(); /* マウスの初期化 */
_iocs_ms_curon(); /* マウスを表示 */
_iocs_skey_mod(0,0,0); /* ソフトウェアキーボード消去 */
_iocs_crtmod( 4 ); /* 512*512 16 colors */
_iocs_g_clr_on(); /* グラフィック表示 */
/* パレットデータの初期化 */
for( i = 0; i < 16; i++ ){
_iocs_gpalet( i, palet_data[i] );
}
_iocs_apage( 2 ); /* 背景はページ 2 */
fill( 0, 0, 511, 511, BG_COLOR ); /* 背景は暗い緑 */
/* 六角形を描画する */
for( i = 0; i < SIZE; i++ ){
int x = zahyou[i][0];
int y = zahyou[i][1];
int j;
static int diff[7][2] = {
0, -22, -19, -11, -19, 11, 0, 22, 19, 11, 19, -11, 0, -22,
};
for( j = 0; j < 6; j++ ){
line( x + diff[j][0], y + diff[j][1],
x + diff[j + 1][0], y + diff[j + 1][1], 0 );
}
}
print_string( 32, 480, 2, "六角Reversi", YELLOW ); /* 黄色 */
print_level(); /* レベル */
print_move(); /* 先手・後手 */
print_string( 64 * 6 + 8, 480, 2, "対局", STR_COLOR );
print_string( 64 * 7 + 8, 480, 2, "終了", STR_COLOR );
}
/* end of file */